表單長好之後準備來新增跟查詢資料啦。
Laravel 原生有 DB 類別來幫助查詢跟新增資料,像是
$users = DB::table('users')->get(); //取出 users 表單的所有資料
不過 DB 主要就是單純的查詢跟寫入功能,對於寫入前跟讀取後的資料處理都要再另外進行。
這部分就是 Eloquent ORM 的長處了,Eloquent 會針對各表單建立 Model 類別,在這個 Model 中可以定義各欄位寫入跟讀取時的額外處理,像是型別轉換或編譯、解析 Json 資料,或是限制某些欄位不被直接寫入(像是外鍵 id),又或是在大量讀取資料時不包含指定欄位等等。在 Model 設定之後進行查詢的程式碼都可以簡化成幾個簡單的函式,整體上可以讓程式碼更簡潔、更容易閱讀。
首先用指令產生 Model
sail artisan make:model Todo
產生的 Model 預設放在 App\Models 底下。
如果是已經用 migration 建好了表單,要產生對應的 Model 的話就要注意 Model 的名稱,以 Todo 為例, Eloquent 在執行查詢時會自動找尋名稱為 todos 的表單。
也可以直接從 Model 開始建立,建立時在一併產生 migration 檔案
sail artisan make:model Todo -m
除了 migration 外也可以同時產生 Controller,Seeder(種子資料),Factory(自動產生種子資料值)檔案
sail artisan make:model Todo -m -c -s -f
sail artisan make:model Todo -mcsf //功能跟上面相同
-c 指令產生的 controller 會是全空的,可以再加上 -r (resource)或 --api (api source) 指令產生預設的函式
sail artisan make:model Todo -mcsfr
也有直接產生全餐的指令
sail artisan make:model Todo -a
-a 指令產生的 controller 預設是用 resource controller,可以加上 --api 修改成 api soucre。
sail artisan make:model Todo -a --api
這樣就省去自己一個個建立的時間了,再到 routes/web.php 加上
// routes/api.php
use App\Http\Controllers\TodoController;
//...
Route::resource('todo', TodoController::class);
這樣 CRUD 的路由就都開通了,可以直接開始實作。